package org.cooperativa.controller;

import org.cooperativa.entities.Socio;
import org.cooperativa.dao.SocioFacade;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJBException;
import javax.inject.Named;
import javax.inject.Inject;
import javax.enterprise.context.SessionScoped;
import javax.faces.event.ActionEvent;
import org.cooperativa.controller.util.JsfUtil;
import org.cooperativa.entities.Persona;
import org.cooperativa.proceso.Ejb1;

@Named(value = "socioController")
@SessionScoped
public class SocioController extends AbstractController<Socio> implements Serializable {

    @Inject
    private SocioFacade ejbFacade;
    @Inject
    Ejb1 ejb;
    @Inject
    private PersonaController personaController; //Se inyecta el controlador para obtener el ID de la transaccion recien creada
    private String codigoSocio;
    private Socio current;
    private boolean socioCreado = false;
    private ArrayList<Socio> socioList = new ArrayList<Socio>();

    public SocioController() {
        super(Socio.class);
        current = new Socio();
        current.setActivo(true);
        current.setCreationDate(new Date());
        current.setCreatedBy(1);
    }

    @PostConstruct
    public void init() {
        super.setFacade(ejbFacade);
    }

    //------Getters y Setters-------
    public String getCodigoSocio() {
        return codigoSocio;
    }

    public void setCodigoSocio(String codigoSocio) {
        this.codigoSocio = codigoSocio; //preguntar si la palabra this esta bien aqui
    }

    public Socio getCurrent() {
        if (current == null) {
            current = new Socio();
            current.setActivo(true);
            current.setCreationDate(new Date());
            current.setCreatedBy(1);
        }
        return current;
    }

    public void setCurrent(Socio current) {
        this.current = current;
    }

    public boolean isSocioCreado() {
        return socioCreado;
    }

    public void setSocioCreado(boolean socioCreado) {
        this.socioCreado = socioCreado;
    }

    public ArrayList<Socio> getSocioList() {
        return socioList;
    }

    public void setSocioList(ArrayList<Socio> socioList) {
        this.socioList = socioList;
    }

    public void buscarSocioPorCodigo() {

        Socio socio;

        socio = ejb.buscarSocioPorCodigoProceso(codigoSocio);

        //socio = ejbFacade.buscarSocioPorCodigo(codigoSocio);  

        if (socio != null) {
            //if(!socio.getEstado().equals("Inactivo")){ //se verificara que el estado del socio no este inactivo
            //return "RegistrarPago.xhtml"; //reenviar a la pagina que permite registrar el pago
            //}
//         else{
//            return "Mensaje"; //mostrar un mensaje indicando que el socio esta inactivo o no existe
//         }
        }

    }

    public void createNew(ActionEvent actionEvent) {
        String successMessage = ResourceBundle.getBundle("/Bundle").getString("TransaccionCreated");
        //Lo primero que se debe hacer es agregar a current el id de la transaccion recien creada

        current.setPersonaId(personaController.getCurrent());


        try {
            //antes de almacenar la nueva instacion debemos asignar los valores para auditoria de la BD
            current.setCreatedBy(1); //modificar luego para que ponga el id del usuario
            current.setCreationDate(new Date());

            ejbFacade.create(current);
            socioCreado = true;
            //Se agrega a la lista para mostrarlo en el datatable que contiene el detalle de la transaccion
            socioList.add(current);

            //Reseteamos los campos del detalle que se muestran en pantalla
            current = new Socio();
            personaController.setCurrent(new Persona());

            /*
             * En caso de agregar mas detalles:             
             * Quitar el reseteo:  personaController.setCurrent(new Persona());
             * Y setear todos los valores del detalle:              
             * 
             //            current.setActivo(true);
             //            current.setCreationDate(new Date());
             //            current.setCreatedBy(1);
             //            current.setPersonaId(personaController.getCurrent());
             * 
             */
            JsfUtil.addSuccessMessage(successMessage);

        } catch (EJBException ex) {
            String msg = "";
            Throwable cause = JsfUtil.getRootCause(ex.getCause());
            if (cause != null) {
                msg = cause.getLocalizedMessage();
            }
            if (msg.length() > 0) {
                JsfUtil.addErrorMessage(msg);
            } else {
                JsfUtil.addErrorMessage(ex, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
            }
        } catch (Exception ex) {
            Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, ex);
            JsfUtil.addErrorMessage(ex, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
        }
    }
}
